def canteen_ordering():
    """食堂点餐系统主函数"""
    print("=" * 40)
    print("          欢迎使用校园食堂点餐系统          ")
    print("=" * 40)

    # 1. 定义菜单（菜品编号、名称、价格）
    menu = [
        {"id": 1, "name": "香辣鸡腿饭", "price": 18.0},
        {"id": 2, "name": "番茄鸡蛋面", "price": 12.0},
        {"id": 3, "name": "鱼香肉丝盖饭", "price": 16.0},
        {"id": 4, "name": "扬州炒饭", "price": 14.0},
        {"id": 5, "name": "紫菜蛋花汤", "price": 6.0},
        {"id": 6, "name": "可乐（中杯）", "price": 5.0}
    ]

    # 2. 展示菜单
    print("\n【今日菜单】")
    print("-" * 30)
    print(f"{'编号':<6}{'菜品名称':<12}{'价格（元）':<8}")
    print("-" * 30)
    for dish in menu:
        print(f"{dish['id']:<6}{dish['name']:<12}{dish['price']:<8.1f}")
    print("-" * 30)

    # 3. 初始化订单
    order = []  # 存储订单：[(菜品名称, 单价, 数量, 小计), ...]
    total_amount = 0.0  # 订单总金额

    # 4. 点餐流程（循环点餐，支持多次选择）
    while True:
        # 输入菜品编号
        try:
            dish_id = input("\n请输入要点的菜品编号（输入0结束点餐）：")
            dish_id = int(dish_id)  # 转换为整数

            # 结束点餐条件
            if dish_id == 0:
                if not order:  # 空订单处理
                    print("您还未点任何菜品，是否继续点餐？")
                    continue_choice = input("输入'y'继续，其他键退出：").lower()
                    if continue_choice != 'y':
                        print("感谢您的使用，欢迎下次光临！")
                        return
                    else:
                        continue
                break  # 非空订单，退出点餐循环

            # 验证菜品编号是否存在
            selected_dish = None
            for dish in menu:
                if dish['id'] == dish_id:
                    selected_dish = dish
                    break
            if not selected_dish:
                print(f"错误：没有编号为{dish_id}的菜品，请重新输入！")
                continue

            # 输入购买数量
            while True:
                try:
                    quantity = input(f"请输入{selected_dish['name']}的购买数量（至少1份）：")
                    quantity = int(quantity)
                    if quantity >= 1:
                        break
                    else:
                        print("数量必须大于等于1，请重新输入！")
                except ValueError:
                    print("输入错误！请输入有效的整数。")

            # 计算小计并添加到订单
            subtotal = selected_dish['price'] * quantity
            order.append((selected_dish['name'], selected_dish['price'], quantity, subtotal))
            total_amount += subtotal

            # 确认添加结果
            print(f"✅ 已添加 {selected_dish['name']} × {quantity} 份，小计：{subtotal:.1f}元")
            print(f"当前订单总金额：{total_amount:.1f}元")

        except ValueError:
            print("输入错误！请输入有效的数字编号。")

    # 5. 展示订单详情
    print("\n" + "=" * 40)
    print("                     订单详情                     ")
    print("=" * 40)
    print(f"{'菜品名称':<12}{'单价（元）':<10}{'数量':<6}{'小计（元）':<8}")
    print("-" * 40)
    for item in order:
        print(f"{item[0]:<12}{item[1]:<10.1f}{item[2]:<6}{item[3]:<8.1f}")
    print("-" * 40)
    print(f"{'订单总金额':<30}{total_amount:.1f}元")
    print("=" * 40)

    # 6. 支付确认流程
    while True:
        payment_choice = input("\n是否确认支付？（y=确认支付，n=取消订单）：").lower()
        if payment_choice == 'y':
            print("\n🎉 支付成功！您的餐品正在准备中，请耐心等待取餐～")
            print("感谢您的光临，祝您用餐愉快！")
            break
        elif payment_choice == 'n':
            print("\n❌ 订单已取消，欢迎下次光临！")
            break
        else:
            print("输入错误！请输入'y'确认支付或'n'取消订单。")

# 运行系统
if __name__ == "__main__":
    canteen_ordering()